package com.h5ve.security.util;

import cn.dev33.satoken.stp.StpUtil;
import com.h5ve.base.constant.CommonConstants;
import com.h5ve.base.util.StrUtil;
import com.h5ve.security.entity.H5veUser;
import lombok.experimental.UtilityClass;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

/**
 * @author h5ve
 * @date 2022-01-09
 * @description 安全工具类
 */
@UtilityClass
public class SecurityUtil {

    private String USER_KEY = "h5ve";

    public void setUser(String userName, H5veUser h5veUser){
        StpUtil.login(userName);
        StpUtil.getTokenSession().set(USER_KEY, h5veUser);
    }

    public H5veUser getUser(){
        return (H5veUser) StpUtil.getTokenSession().get(USER_KEY);
    }

    public String getUserName() {
        return getUser().getUserName();
    }

    public Long getDeptId() {
        return getUser().getDeptId();
    }

    public Set<String> getRoles() {
        return getUser().getRoles();
    }

    public List<Long> getRoleList() {
        List<Long> roleIds = new ArrayList<>();
        getRoles().stream()
                .filter(roleId -> StrUtil.startWith(roleId, CommonConstants.ROLE))
                .forEach(roleId -> {
                    String id = StrUtil.removePrefix(roleId, CommonConstants.ROLE);
                    roleIds.add(Long.parseLong(id));
                });
        return roleIds;
    }

    public Set<String> getPermissions() {
        return getUser().getPermissions();
    }
}
